微信浏览器对单页面应用程序并不友好,在不使用微信 SDK 的情况下无法分享当前页面,只能分享落地页。
我的博客文章:https://blog.ci0n.cn/p_ec7b781c.html
检测微信浏览器
const UA = navigator.userAgent.toLowerCase()
// 判断微信浏览器
export const WECHAT_BROWSER = UA.includes('micromessenger')
每次路由改变都同步一次url
import { WECHAT_BROWSER } from "./utils/browser.js"
export default {
name: "App",
watch: {
$route: {
immediate: true,
deep: true,
handler(to, from) {
if (!WECHAT_BROWSER) return;
// 不会刷新浏览器,只是让微信浏览器同步当前url
// eslint-disable-next-line
window.location.href = window.location.href
}
}
}
};
vue执行前刷新页面
同步 url 之后是解决了问题,但是发现会出现一个奇怪的 bug。
在真机里进入 http://192.168.1.5:8080
和 http://192.168.1.5:8080/#/
(两个url的区别只在/#/
),会发现其中一个链接依然无法分享当前页面。
import { WECHAT_BROWSER } from "./utils/browser.js";
if (WECHAT_BROWSER && window.location.search.includes('from_wx') === false) {
let url = window.location.href
url += (location.search ? '&' : '?') + 'from_wx=1'
window.location.replace(url)
}
new Vue({
// ...
})
使用一个标志位在 vue 执行之前(为了尽快刷新页面,节省等待的时间)判断首次进入刷新页面,这样就可以解决这个奇怪的 bug,但是会让用户等待的时间更长,影响了性能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。